curl --request POST \
--url https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"address": "<string>",
"network": "<string>",
"counterparty_entity_id": "<string>",
"beneficiary_name": "<string>",
"label": "<string>",
"external_ref": "<string>"
}
'import requests
url = "https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties"
payload = {
"address": "<string>",
"network": "<string>",
"counterparty_entity_id": "<string>",
"beneficiary_name": "<string>",
"label": "<string>",
"external_ref": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
address: '<string>',
network: '<string>',
counterparty_entity_id: '<string>',
beneficiary_name: '<string>',
label: '<string>',
external_ref: '<string>'
})
};
fetch('https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'address' => '<string>',
'network' => '<string>',
'counterparty_entity_id' => '<string>',
'beneficiary_name' => '<string>',
'label' => '<string>',
'external_ref' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties"
payload := strings.NewReader("{\n \"address\": \"<string>\",\n \"network\": \"<string>\",\n \"counterparty_entity_id\": \"<string>\",\n \"beneficiary_name\": \"<string>\",\n \"label\": \"<string>\",\n \"external_ref\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"address\": \"<string>\",\n \"network\": \"<string>\",\n \"counterparty_entity_id\": \"<string>\",\n \"beneficiary_name\": \"<string>\",\n \"label\": \"<string>\",\n \"external_ref\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"address\": \"<string>\",\n \"network\": \"<string>\",\n \"counterparty_entity_id\": \"<string>\",\n \"beneficiary_name\": \"<string>\",\n \"label\": \"<string>\",\n \"external_ref\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"counterparty_id": "3f0a3c1e-6b1d-5f2a-8e44-9a0b1c2d3e4f",
"client_entity_id": "6859927c-292e-4077-8d6a-70542c00a267",
"counterparty_entity_id": "<string>",
"address": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"network": "eth",
"beneficiary_name": "Halvard Capital AG",
"status": "clear",
"checks": [
{
"kind": "address_risk",
"check_type": "range_address_risk",
"label": "Range address risk",
"provider": "range",
"provider_used": null,
"status": "pass",
"screened_at": "2026-10-07T09:12:03.120Z",
"note": null,
"reason": {
"code": "not_approved_counterparty",
"check_type": "approved_counterparties",
"policy_key": "client.whitelist",
"message": "Not one of the client's approved counterparties"
},
"risk_tier": "low",
"travel_rule_status": "complete",
"provider_detail": {
"provider_status": "SETTLED"
},
"evidence": {
"screen_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"score": 100,
"sanctioned": true,
"signals": [
{
"signal": "eu-sanctioned",
"name": "EU Sanctioned",
"pillar": "exposure",
"severity": "severe",
"summary": "1.24% of counterparty volume is eu-sanctioned, crossing the 1% (severe) threshold.",
"confidence": null,
"rule": {
"name": "Sanctions exposure",
"threshold": "1% (severe)"
}
}
],
"listings": [
{
"authority": "OFAC",
"program": "SDN",
"list_key": "us_ofac_sdn",
"listed_at": "2022-04-14",
"delisted_at": null
}
],
"attribution": [
{
"name": "Lazarus Group",
"category": "sanctions",
"role": "owner",
"polarity": "risk",
"confidence": 98
}
],
"exposures": [
{
"name": "Tornado Cash",
"category": "mixer",
"direction": "incoming",
"hop": "direct",
"share": 0.123,
"share_basis": "total-volume",
"usd": 45210
}
],
"totals": {
"incoming_usd": 367000,
"outgoing_usd": 120000,
"flagged_incoming_usd": 45210,
"flagged_outgoing_usd": 0
},
"data_as_of": "2026-10-08T09:00:00Z",
"provider_used": "chainalysis"
}
}
],
"reasons": [
{
"code": "not_approved_counterparty",
"check_type": "approved_counterparties",
"policy_key": "client.whitelist",
"message": "Not one of the client's approved counterparties"
}
],
"last_screened_at": "<string>",
"case_id": "<string>"
}{
"counterparty_id": "3f0a3c1e-6b1d-5f2a-8e44-9a0b1c2d3e4f",
"client_entity_id": "6859927c-292e-4077-8d6a-70542c00a267",
"counterparty_entity_id": "<string>",
"address": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"network": "eth",
"beneficiary_name": "Halvard Capital AG",
"status": "clear",
"checks": [
{
"kind": "address_risk",
"check_type": "range_address_risk",
"label": "Range address risk",
"provider": "range",
"provider_used": null,
"status": "pass",
"screened_at": "2026-10-07T09:12:03.120Z",
"note": null,
"reason": {
"code": "not_approved_counterparty",
"check_type": "approved_counterparties",
"policy_key": "client.whitelist",
"message": "Not one of the client's approved counterparties"
},
"risk_tier": "low",
"travel_rule_status": "complete",
"provider_detail": {
"provider_status": "SETTLED"
},
"evidence": {
"screen_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"score": 100,
"sanctioned": true,
"signals": [
{
"signal": "eu-sanctioned",
"name": "EU Sanctioned",
"pillar": "exposure",
"severity": "severe",
"summary": "1.24% of counterparty volume is eu-sanctioned, crossing the 1% (severe) threshold.",
"confidence": null,
"rule": {
"name": "Sanctions exposure",
"threshold": "1% (severe)"
}
}
],
"listings": [
{
"authority": "OFAC",
"program": "SDN",
"list_key": "us_ofac_sdn",
"listed_at": "2022-04-14",
"delisted_at": null
}
],
"attribution": [
{
"name": "Lazarus Group",
"category": "sanctions",
"role": "owner",
"polarity": "risk",
"confidence": 98
}
],
"exposures": [
{
"name": "Tornado Cash",
"category": "mixer",
"direction": "incoming",
"hop": "direct",
"share": 0.123,
"share_basis": "total-volume",
"usd": 45210
}
],
"totals": {
"incoming_usd": 367000,
"outgoing_usd": 120000,
"flagged_incoming_usd": 45210,
"flagged_outgoing_usd": 0
},
"data_as_of": "2026-10-08T09:00:00Z",
"provider_used": "chainalysis"
}
}
],
"reasons": [
{
"code": "not_approved_counterparty",
"check_type": "approved_counterparties",
"policy_key": "client.whitelist",
"message": "Not one of the client's approved counterparties"
}
],
"last_screened_at": "<string>",
"case_id": "<string>"
}[Beta] approve a counterparty address for a client
Adds the address to one of the client’s counterparties in the entity register (an existing one by counterparty_entity_id, or one found or created by beneficiary_name) and screens it now when the setup screens on add. A flag opens a case; the address stays approved, flagged. Idempotent on the address: 201 new, 200 already there.
curl --request POST \
--url https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"address": "<string>",
"network": "<string>",
"counterparty_entity_id": "<string>",
"beneficiary_name": "<string>",
"label": "<string>",
"external_ref": "<string>"
}
'import requests
url = "https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties"
payload = {
"address": "<string>",
"network": "<string>",
"counterparty_entity_id": "<string>",
"beneficiary_name": "<string>",
"label": "<string>",
"external_ref": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
address: '<string>',
network: '<string>',
counterparty_entity_id: '<string>',
beneficiary_name: '<string>',
label: '<string>',
external_ref: '<string>'
})
};
fetch('https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'address' => '<string>',
'network' => '<string>',
'counterparty_entity_id' => '<string>',
'beneficiary_name' => '<string>',
'label' => '<string>',
'external_ref' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties"
payload := strings.NewReader("{\n \"address\": \"<string>\",\n \"network\": \"<string>\",\n \"counterparty_entity_id\": \"<string>\",\n \"beneficiary_name\": \"<string>\",\n \"label\": \"<string>\",\n \"external_ref\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"address\": \"<string>\",\n \"network\": \"<string>\",\n \"counterparty_entity_id\": \"<string>\",\n \"beneficiary_name\": \"<string>\",\n \"label\": \"<string>\",\n \"external_ref\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/screening/clients/{client_entity_id}/counterparties")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"address\": \"<string>\",\n \"network\": \"<string>\",\n \"counterparty_entity_id\": \"<string>\",\n \"beneficiary_name\": \"<string>\",\n \"label\": \"<string>\",\n \"external_ref\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"counterparty_id": "3f0a3c1e-6b1d-5f2a-8e44-9a0b1c2d3e4f",
"client_entity_id": "6859927c-292e-4077-8d6a-70542c00a267",
"counterparty_entity_id": "<string>",
"address": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"network": "eth",
"beneficiary_name": "Halvard Capital AG",
"status": "clear",
"checks": [
{
"kind": "address_risk",
"check_type": "range_address_risk",
"label": "Range address risk",
"provider": "range",
"provider_used": null,
"status": "pass",
"screened_at": "2026-10-07T09:12:03.120Z",
"note": null,
"reason": {
"code": "not_approved_counterparty",
"check_type": "approved_counterparties",
"policy_key": "client.whitelist",
"message": "Not one of the client's approved counterparties"
},
"risk_tier": "low",
"travel_rule_status": "complete",
"provider_detail": {
"provider_status": "SETTLED"
},
"evidence": {
"screen_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"score": 100,
"sanctioned": true,
"signals": [
{
"signal": "eu-sanctioned",
"name": "EU Sanctioned",
"pillar": "exposure",
"severity": "severe",
"summary": "1.24% of counterparty volume is eu-sanctioned, crossing the 1% (severe) threshold.",
"confidence": null,
"rule": {
"name": "Sanctions exposure",
"threshold": "1% (severe)"
}
}
],
"listings": [
{
"authority": "OFAC",
"program": "SDN",
"list_key": "us_ofac_sdn",
"listed_at": "2022-04-14",
"delisted_at": null
}
],
"attribution": [
{
"name": "Lazarus Group",
"category": "sanctions",
"role": "owner",
"polarity": "risk",
"confidence": 98
}
],
"exposures": [
{
"name": "Tornado Cash",
"category": "mixer",
"direction": "incoming",
"hop": "direct",
"share": 0.123,
"share_basis": "total-volume",
"usd": 45210
}
],
"totals": {
"incoming_usd": 367000,
"outgoing_usd": 120000,
"flagged_incoming_usd": 45210,
"flagged_outgoing_usd": 0
},
"data_as_of": "2026-10-08T09:00:00Z",
"provider_used": "chainalysis"
}
}
],
"reasons": [
{
"code": "not_approved_counterparty",
"check_type": "approved_counterparties",
"policy_key": "client.whitelist",
"message": "Not one of the client's approved counterparties"
}
],
"last_screened_at": "<string>",
"case_id": "<string>"
}{
"counterparty_id": "3f0a3c1e-6b1d-5f2a-8e44-9a0b1c2d3e4f",
"client_entity_id": "6859927c-292e-4077-8d6a-70542c00a267",
"counterparty_entity_id": "<string>",
"address": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"network": "eth",
"beneficiary_name": "Halvard Capital AG",
"status": "clear",
"checks": [
{
"kind": "address_risk",
"check_type": "range_address_risk",
"label": "Range address risk",
"provider": "range",
"provider_used": null,
"status": "pass",
"screened_at": "2026-10-07T09:12:03.120Z",
"note": null,
"reason": {
"code": "not_approved_counterparty",
"check_type": "approved_counterparties",
"policy_key": "client.whitelist",
"message": "Not one of the client's approved counterparties"
},
"risk_tier": "low",
"travel_rule_status": "complete",
"provider_detail": {
"provider_status": "SETTLED"
},
"evidence": {
"screen_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"score": 100,
"sanctioned": true,
"signals": [
{
"signal": "eu-sanctioned",
"name": "EU Sanctioned",
"pillar": "exposure",
"severity": "severe",
"summary": "1.24% of counterparty volume is eu-sanctioned, crossing the 1% (severe) threshold.",
"confidence": null,
"rule": {
"name": "Sanctions exposure",
"threshold": "1% (severe)"
}
}
],
"listings": [
{
"authority": "OFAC",
"program": "SDN",
"list_key": "us_ofac_sdn",
"listed_at": "2022-04-14",
"delisted_at": null
}
],
"attribution": [
{
"name": "Lazarus Group",
"category": "sanctions",
"role": "owner",
"polarity": "risk",
"confidence": 98
}
],
"exposures": [
{
"name": "Tornado Cash",
"category": "mixer",
"direction": "incoming",
"hop": "direct",
"share": 0.123,
"share_basis": "total-volume",
"usd": 45210
}
],
"totals": {
"incoming_usd": 367000,
"outgoing_usd": 120000,
"flagged_incoming_usd": 45210,
"flagged_outgoing_usd": 0
},
"data_as_of": "2026-10-08T09:00:00Z",
"provider_used": "chainalysis"
}
}
],
"reasons": [
{
"code": "not_approved_counterparty",
"check_type": "approved_counterparties",
"policy_key": "client.whitelist",
"message": "Not one of the client's approved counterparties"
}
],
"last_screened_at": "<string>",
"case_id": "<string>"
}Authorizations
Authorization method required to allow user to access the api endpoints.
Path Parameters
Body
Response
The approval link (client, network, address).
"3f0a3c1e-6b1d-5f2a-8e44-9a0b1c2d3e4f"
"6859927c-292e-4077-8d6a-70542c00a267"
"0x8589427373d6d84e98730d7795d8f6f8731fda16"
"eth"
"Halvard Capital AG"
pending: not screened yet (screened about a minute after it was added, or by the next run when screening on add is off).
clear, flagged, removed, pending, error "clear"
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The /v2/cases id of the open case its flag opened (source_type counterparty_screening).
Was this page helpful?